package com.test17_Lambda;

import org.junit.Test;

/**
 * Lambda表达式
 */
public class YootkDemo_01 {

    @Test
    public void test1() {
        {
            // 使用匿名内部类的形式
            IMessage message = new IMessage() {
                @Override
                public String echo(String msg) {
                    return "【ECHO】" + msg;
                }
            };
            System.out.println(message.echo("www.yootk.com"));
        }
        {
            // 使用Lambda表达式，等价于匿名内部类
            IMessage message = (str) -> "【ECHO】" + str;
            System.out.println(message.echo("www.yootk.com"));
        }
    }

    @Test
    public void test2() {
        {
            IMessage2 message = (str) -> System.out.println("【信息发送】" + str);
            message.send("www.yootk.com");
        }
        {
            IMessage2 message = (str) -> {
                if (str.contains("yootk")) {
                    System.out.println("【沐言科技 - VIP通道】" + str);
                } else {
                    System.out.println("【消息发送 - 大众通道】" + str);
                }
            };
            message.send("www.yootk.com");
            message.send("爆可爱的小李老师");
        }
    }
}

/**
 * 使用Lambda表达式，必须是函数式编程接口
 * 接口中只能有一个抽象方法
 */
@FunctionalInterface
interface IMessage {
    public String echo(String msg);

    public default void fun() {
    }
}

interface IMessage2 {
    public void send(String msg);
}
